home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 07 - 1991 / MacTutor Live! SF 91 / GIFfy / GIF.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-01-07  |  4.1 KB  |  109 lines  |  [TEXT/MPS ]

  1. /*
  2.  *    GIF.h        Header file for GIF translation
  3.  *                Basic data structures defining the file format
  4.  *
  5.  *    GIF stands for "Graphics Interchange Format" and is a trademark of CompuServe.
  6.  *    an H&R Block Company
  7.  *
  8.  */
  9.  
  10. #define    NIL    (0L)
  11. #define    TRUE    true
  12. #define    FALSE    false
  13.  
  14. /*    PROTOTYPE(s)    */
  15. Boolean    ProcessGIF(Str255 filename, short vRefnum);
  16.  
  17.  
  18.  
  19. unsigned char    signature[6];
  20.  
  21. typedef    unsigned char    UBYTE;
  22. typedef    unsigned short    USHORT;
  23.  
  24. /*    The logical screen width and height can both be larger than the physical display.
  25.     How images larger than the physical display are handled is implementation
  26.     dependent and can take advantage of such things as scrolling windows or may
  27.     be clipped to the edges of the display.
  28.     
  29.     The value of "pixel" also defines the maximum number of colors within an image.
  30.     The range of values is 0..7 (1..8 bits).  This gives a range of 2 (B&W) to
  31.     256 colors.  Bit 3 of the flags byte is reserved for future use and MUST be zero.
  32.     
  33.     The clrFlags field is interpreted as follows:
  34.         Boolean    hasColorMap
  35.         0..3    colorResolutionMinus1
  36.         0..1    mustBeZero
  37.         0..7    pixelsMinus1
  38. */
  39.  
  40. typedef    struct {
  41.     USHORT    rastWidth;        /*    LSB, MSB on disk of raster width in pixels    */
  42.     USHORT    rastHeightLo;    /*    LSB, MSB on disk of raster height in pixels    */
  43.     UBYTE    clrFlags;        /*    See above for interpretation */
  44.     UBYTE    background;        /*    Color index of screen background (comes from Global color map, or default map if no global defined) */
  45.     UBYTE    terminator;        /*    This should be zero */
  46. } ScreenDescriptor;
  47.  
  48. /*    The Global Color Map is optional and its presence is indicated by a "TRUE" value
  49.     for the hasColorMap bit of the clrFlags field, above.  There will be a sequence
  50.     of 2**(bitsPerPixel) RGBType entries.
  51.     ie either 2, 4, 8, 16, 32, 64, 128, 256 -- actually, only 2, 4, 16, and 256
  52.     are common.
  53.     
  54.     Each image pixel will be displayed according to its closest match with an
  55.     available color of the display based upon this color map.  The color components
  56.     represent a fractional intensity value from none (0) to full (255) -- white
  57.     is {255, 255, 255} and black is {0, 0, 0}.  This is mapped on the Macintosh
  58.     into the two-byte RGB values used in ColorQD via the expedient of ORing the
  59.     intensity with the 8-bit shift of itself, ie 128 maps to 0x8080.
  60. */
  61.  
  62. typedef    struct {
  63.     UBYTE    red;
  64.     UBYTE    green;
  65.     UBYTE    blue;
  66. } RGBType;
  67.  
  68. /*    The ImageDescriptor defines the actual placement and extents of the following
  69.     image within the space defined by the ScreenDescriptor.  Also defined are flags
  70.     to indicate the presence of a local color lookup map, and to define the pixel
  71.     display sequence.  Each ImageDescriptor is introduced by an image separator
  72.     character.  The role of this separator is to provide a synchronization character
  73.     to introduce an ImageDescriptor.  This is desirable if there is more than one
  74.     image in a GIF file.  This character is defined as 0x2c (ascii comma).  When
  75.     this character is encountered between images, it will be immediately followed
  76.     by an ImageDescriptor.
  77.     
  78.     Any bytes encountered between the end of an image and the image separator
  79.     character are to be ignored.
  80.     
  81.     The specifications for the image position and size must be confined to the
  82.     dimensions defined by the ScreenDescriptor.  OTHO, it is not necessary that the
  83.     image fill the entire display area provided.
  84. */
  85.  
  86. typedef    struct {
  87.     UBYTE    imageSeparator;            /*    Must be 0x2c - a comma */
  88.     USHORT    leftInset;                /*    LSB, MSB on disk of the inset from the left for the first pixel */
  89.     USHORT    vertInset;                /*    LSB, MSB on disk of the inset from the top for the first pixel */
  90.     USHORT    imageWidth;                /*    LSB, MSB on disk of the image width */
  91.     USHORT    imageHeight;            /*    LSB, MSB on disk of the image height */
  92.     UBYTE    imageFlags;                /*    See following masks on imageFlags */
  93. } ImageDescriptor;
  94.  
  95. /* A more structured definition would be:
  96.     (useGlobalColorMap, useLocalColorMap)
  97.     (formattedSequential, formattedInterlaced)
  98.     0..7        reserved
  99.     0..7        numPixelsMinus1
  100. */
  101. #define    colorMapMask    0x80
  102. #define    interlaceMask    0x40
  103. #define    reservedMask    0x38
  104. #define    pixelMask        0x07
  105.  
  106. #define    IMAGESEPARATOR    0x2c
  107. #define    PALENTSIZE        10            /* 8 bits plus 1 pixel border on all sides */
  108. #define    BEHIND            (WindowPtr) (-1L)
  109. #define    MAXSHORT        0x7FFF